package Other;

import java.util.Arrays;

public class leet_88 {
    public static void main(String[] args) {
        Solution_88 p =new Solution_88();
        int[] nums1 = new int[]{1,2,3,0,0,0};
        int[] nums2 = new int[]{2,5,6};
        int[] result = p.mergeNewNums(nums1, 3, nums2, 3);
        System.out.println(Arrays.toString(result));
    }
}


class Solution_88 {
    public int[] mergeNewNums(int[] nums1, int m, int[] nums2, int n) {
        // 新的存放数组
        int[] numsResult = new int[m+n];
        int numsLink = 0;
        // 数组一有效数字的尾结点
        int i = 0;
        // 数组二有效数字的尾结点
        int j = 0;
        while(numsLink!=numsResult.length){
            int minNum = 0;
            if(i>m-1){
                minNum = nums2[j];
                j++;
            }else if(j>n-1){
                minNum = nums1[i];
                i++;
            }else{
                if(nums1[i] > nums2[j]){
                    minNum = nums2[j];
                    j++;
                }else {
                    minNum = nums1[i];
                    i++;
                }
            }
            numsResult[numsLink] = minNum;
            numsLink++;
        }
        for (int k = 0; k<m+n; k++) {
            nums1[k] = numsResult[k];
        }
        return nums1;
    }

    public void mergeDoubleLink(int[] nums1, int m, int[] nums2, int n) {
        // 第一个数组的尾巴结点
        int tail = m+n-1;
        // 数组一有效数字的尾结点
        int i = m-1;
        // 数组二有效数字的尾结点
        int j = n-1;
        while(tail>=0){
            int maxNum = 0;
            if(i<0){
                maxNum = nums2[j];
                j--;
            }else if(j<0){
                maxNum = nums1[i];
                i--;
            }else{
                if(nums1[i] > nums2[j]){
                    maxNum = nums1[i];
                    i--;
                }else{
                    maxNum = nums2[j];
                    j--;
                }
            }
            nums1[tail] = maxNum;
            tail--;
        }
    }

}